/*
 * Copyright 2013-2018 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.wpy.auditlog.demos.web;

import com.wpy.auditlog.enums.OperationResult;
import com.wpy.auditlog.enums.SourceChannel;
import com.wpy.auditlog.param.AuditParam;
import com.wpy.auditlog.util.AuditLogger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class BasicController {

    // http://127.0.0.1:8080/hello?name=lisi
    @RequestMapping("/hello")
    @ResponseBody
    public AuditParam hello(@RequestParam(name = "name", defaultValue = "unknown user") String name) {
        AuditParam auditParam = AuditParam.builder()
                .operationResult(OperationResult.SUCCESS).build();
        AuditLogger.audit(auditParam);
        return auditParam;
    }

    // http://127.0.0.1:8080/user
    @RequestMapping("/user")
    @ResponseBody
    public AuditParam user() {
        AuditParam auditParamObjSObj = new AuditParam();
        auditParamObjSObj.setSourceChannel(SourceChannel.WEB);
        AuditParam auditParamObj = new AuditParam();
        auditParamObj.setAppId("OBJ-appId");
        auditParamObj.setOperationObject(auditParamObjSObj);


        AuditParam auditParam = AuditParam.builderAsync()
                .operationObject(auditParamObj).build();
        AuditLogger.audit(auditParam);
        return auditParam;
    }
}
